#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "kernels.cuh"
#include "MatrixMultiplication.h"

#include <iostream>
#include <utility>
#include <time.h>

using namespace std;

typedef void (*Function) (
	float *result,
	const float *matrix1, 
	const float *matrix2,
	const int width,
	const int length, 
	int height);
typedef pair <int, int> intPair;
typedef pair <Function, string> FunctionName;
typedef pair <FunctionName, intPair> Kernel;

#define func(a,b,c) Kernel(FunctionName(a, #a), intPair(b, c))

void multiplyUsingKernels(void);
void callKernels(Kernel* kernels, int kernelsCount);